package com.augrain.microframework.core.util;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;

/**
 * 随机数
 *
 * @author biaoy
 * @since 2024/11/23
 */
public class RandomUtils {

    private RandomUtils() {

    }

    /**
     * 生成随机数
     *
     * @param min 最小值
     * @param max 最大值
     * @return 随机数
     */
    public static int randomInt(int min, int max) {
        return (int) (Math.random() * (max - min + 1)) + min;
    }

    /**
     * 二倍均值生成随机数
     *
     * @param total 生成全量随机数的总和
     * @param count 生成随机数个数
     * @return 随机数列表
     */
    public static List<Integer> generate(int total, int count) {
        int n = count;
        int[] res = new int[n];
        for (int i = 0; i < n - 1; i++) {
            int max = total / count * 2;
            res[i] = ThreadLocalRandom.current().nextInt(1, max);
            total -= res[i];
            count--;
        }
        res[n - 1] = total;
        return Arrays.stream(res).boxed().collect(Collectors.toList());
    }
}
